import pandas as pd
import os
from datetime import datetime

def generate_detailed_test_cases():
    """生成包含详细操作步骤的测试用例"""
    test_cases = []
    
    # 1. 用户登录功能测试用例
    test_cases.append({
        '测试用例ID': 'TC001',
        '测试功能': '用户登录 - 正常登录流程',
        '测试描述': '验证用户使用有效凭据成功登录系统',
        '输入数据': '用户名: admin@example.com, 密码: Admin123456',
        '预期结果': '成功登录系统，进入AI角色模拟应用的主界面',
        '操作步骤': '1. 打开浏览器\n2. 输入应用URL\n3. 在登录页面输入用户名"admin@example.com"\n4. 输入密码"Admin123456"\n5. 点击"登录"按钮',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '高'
    })
    
    test_cases.append({
        '测试用例ID': 'TC002',
        '测试功能': '用户登录 - 密码重置',
        '测试描述': '验证用户忘记密码时能够成功重置密码',
        '输入数据': '注册邮箱: user@example.com',
        '预期结果': '成功发送密码重置邮件，用户能够设置新密码',
        '操作步骤': '1. 在登录页面点击"忘记密码"链接\n2. 输入注册邮箱"user@example.com"\n3. 点击"发送重置链接"按钮\n4. 检查邮箱接收重置邮件\n5. 点击邮件中的重置链接\n6. 设置新密码并确认\n7. 使用新密码登录',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '高'
    })
    
    test_cases.append({
        '测试用例ID': 'TC003',
        '测试功能': '用户注册 - 新用户注册',
        '测试描述': '验证新用户能够成功注册账号',
        '输入数据': '用户名: newuser, 邮箱: newuser@example.com, 密码: NewPass123, 确认密码: NewPass123',
        '预期结果': '成功注册新账号，自动登录并进入应用',
        '操作步骤': '1. 在登录页面点击"立即注册"链接\n2. 输入用户名"newuser"\n3. 输入邮箱"newuser@example.com"\n4. 设置密码"NewPass123"\n5. 确认密码"NewPass123"\n6. 勾选"我已阅读并同意用户协议"\n7. 点击"注册"按钮\n8. 完成邮箱验证（如有）',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '高'
    })
    
    # 2. AI角色管理功能测试用例
    test_cases.append({
        '测试用例ID': 'TC004',
        '测试功能': '角色管理 - 创建新AI角色',
        '测试描述': '验证管理员能够创建新的AI角色',
        '输入数据': '角色名称: 技术顾问, 角色描述: 提供编程和技术问题解答, 角色性格: 专业、耐心, 知识领域: 编程、数据库、网络',
        '预期结果': '成功创建新AI角色，在角色列表中可见',
        '操作步骤': '1. 登录系统并进入管理后台\n2. 点击左侧菜单"角色管理"\n3. 点击"创建新角色"按钮\n4. 输入角色名称"技术顾问"\n5. 填写角色描述"提供编程和技术问题解答"\n6. 设置角色性格为"专业、耐心"\n7. 选择知识领域为"编程、数据库、网络"\n8. 上传角色头像（可选）\n9. 点击"保存"按钮',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '高'
    })
    
    test_cases.append({
        '测试用例ID': 'TC005',
        '测试功能': '角色管理 - 编辑现有角色',
        '测试描述': '验证管理员能够修改现有AI角色的信息',
        '输入数据': '角色ID: 1, 更新的描述: 提供高级编程和技术架构咨询',
        '预期结果': '成功更新角色信息，修改后的信息正确显示',
        '操作步骤': '1. 登录系统并进入管理后台\n2. 点击左侧菜单"角色管理"\n3. 在角色列表中找到要编辑的角色\n4. 点击该角色对应的"编辑"按钮\n5. 修改角色描述为"提供高级编程和技术架构咨询"\n6. 调整其他需要更新的字段\n7. 点击"保存更改"按钮',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    test_cases.append({
        '测试用例ID': 'TC006',
        '测试功能': '角色管理 - 启用/禁用角色',
        '测试描述': '验证管理员能够启用或禁用特定AI角色',
        '输入数据': '角色ID: 2, 目标状态: 禁用',
        '预期结果': '成功更改角色状态，禁用的角色不再对用户可见',
        '操作步骤': '1. 登录系统并进入管理后台\n2. 点击左侧菜单"角色管理"\n3. 在角色列表中找到目标角色\n4. 点击该角色对应的"状态"开关\n5. 确认更改操作\n6. 切换到用户视角，验证该角色是否已隐藏',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    # 3. AI对话功能测试用例
    test_cases.append({
        '测试用例ID': 'TC007',
        '测试功能': 'AI对话 - 基础文本对话',
        '测试描述': '验证用户能够与AI角色进行基本文本对话',
        '输入数据': '对话内容: 你好，能帮我解释一下什么是机器学习吗？',
        '预期结果': 'AI角色返回关于机器学习的准确解释',
        '操作步骤': '1. 登录系统并进入应用主界面\n2. 从角色列表中选择一个AI角色\n3. 在对话输入框中输入"你好，能帮我解释一下什么是机器学习吗？"\n4. 点击"发送"按钮或按回车键\n5. 等待并查看AI回复',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '高'
    })
    
    test_cases.append({
        '测试用例ID': 'TC008',
        '测试功能': 'AI对话 - 多轮对话上下文保持',
        '测试描述': '验证AI角色能够在多轮对话中保持上下文理解',
        '输入数据': '第一轮: 推荐一本关于Python的好书\n第二轮: 它适合初学者吗？',
        '预期结果': 'AI能够理解"它"指的是上一轮推荐的书籍，并给出相应回答',
        '操作步骤': '1. 选择一个AI角色开始对话\n2. 输入"推荐一本关于Python的好书"并发送\n3. 等待AI回复后，输入"它适合初学者吗？"并发送\n4. 检查AI回复是否正确理解了上下文',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '高'
    })
    
    test_cases.append({
        '测试用例ID': 'TC009',
        '测试功能': 'AI对话 - 切换对话角色',
        '测试描述': '验证用户能够在保持当前对话历史的情况下切换AI角色',
        '输入数据': '切换到角色: 创意写作助手',
        '预期结果': '成功切换AI角色，新角色能够理解之前的对话内容',
        '操作步骤': '1. 与第一个AI角色进行几轮对话\n2. 点击角色切换按钮\n3. 从角色列表中选择"创意写作助手"\n4. 继续对话，询问新角色是否了解之前的对话内容',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    # 4. 用户配置功能测试用例
    test_cases.append({
        '测试用例ID': 'TC010',
        '测试功能': '用户配置 - 个人资料编辑',
        '测试描述': '验证用户能够修改自己的个人资料信息',
        '输入数据': '昵称: 技术达人, 头像: new_avatar.jpg, 简介: 热爱编程和AI技术',
        '预期结果': '成功更新个人资料，新信息在个人页面正确显示',
        '操作步骤': '1. 登录系统\n2. 点击右上角用户头像，选择"个人中心"\n3. 点击"编辑资料"按钮\n4. 修改昵称为"技术达人"\n5. 上传新头像图片"new_avatar.jpg"\n6. 填写个人简介"热爱编程和AI技术"\n7. 点击"保存更改"按钮\n8. 刷新页面验证更改是否生效',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    test_cases.append({
        '测试用例ID': 'TC011',
        '测试功能': '用户配置 - 通知设置',
        '测试描述': '验证用户能够自定义系统通知偏好',
        '输入数据': '消息通知: 开启, 邮件通知: 仅重要通知, 推送通知: 关闭',
        '预期结果': '成功更新通知设置，系统按照新设置发送通知',
        '操作步骤': '1. 登录系统\n2. 进入"个人中心"\n3. 点击"通知设置"选项\n4. 开启"消息通知"开关\n5. 在"邮件通知"中选择"仅重要通知"\n6. 关闭"推送通知"开关\n7. 点击"保存设置"按钮',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '低'
    })
    
    # 5. 对话历史和导出功能
    test_cases.append({
        '测试用例ID': 'TC012',
        '测试功能': '对话历史 - 查看历史对话',
        '测试描述': '验证用户能够查看和管理之前的对话历史',
        '输入数据': '对话日期范围: 最近7天',
        '预期结果': '成功显示指定时间范围内的所有对话记录',
        '操作步骤': '1. 登录系统\n2. 点击左侧菜单"对话历史"\n3. 使用日期筛选器选择"最近7天"\n4. 浏览显示的对话列表\n5. 点击任意对话查看详细内容',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    test_cases.append({
        '测试用例ID': 'TC013',
        '测试功能': '对话历史 - 导出对话记录',
        '测试描述': '验证用户能够导出对话记录为不同格式',
        '输入数据': '导出格式: PDF, 导出范围: 当前对话',
        '预期结果': '成功导出对话记录为PDF文件，内容完整正确',
        '操作步骤': '1. 打开一个对话历史\n2. 点击右上角的"更多操作"按钮\n3. 选择"导出对话"选项\n4. 选择导出格式为"PDF"\n5. 确认导出范围为"当前对话"\n6. 点击"导出"按钮\n7. 检查下载的PDF文件内容',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '低'
    })
    
    # 6. 系统性能和兼容性测试
    test_cases.append({
        '测试用例ID': 'TC014',
        '测试功能': '性能测试 - 大文本处理',
        '测试描述': '验证AI角色能够处理和回复包含大量文本的输入',
        '输入数据': '大段文本(约500字的技术文档)',
        '预期结果': 'AI能够在合理时间内(30秒内)处理并回复大文本内容',
        '操作步骤': '1. 选择一个AI角色\n2. 准备一段约500字的技术文档文本\n3. 将文本粘贴到对话输入框中\n4. 发送文本并开始计时\n5. 记录AI响应时间\n6. 检查回复质量和相关性',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    test_cases.append({
        '测试用例ID': 'TC015',
        '测试功能': '兼容性测试 - 移动端访问',
        '测试描述': '验证应用在移动设备上的正常运行和显示',
        '输入数据': '移动设备: iOS 15手机, 浏览器: Safari',
        '预期结果': '应用在移动设备上显示正常，所有功能可正常使用',
        '操作步骤': '1. 使用iOS 15手机打开Safari浏览器\n2. 输入应用URL\n3. 登录系统\n4. 测试主要功能: 浏览角色、开始对话、发送消息、查看历史\n5. 检查页面布局是否适配移动屏幕\n6. 验证触摸操作响应正常',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    # 7. 高级功能测试
    test_cases.append({
        '测试用例ID': 'TC016',
        '测试功能': '高级功能 - 语音输入',
        '测试描述': '验证用户能够通过语音输入与AI角色对话',
        '输入数据': '语音输入: "如何提高编程效率？"',
        '预期结果': '系统正确识别语音并转换为文本，AI角色给出相应回复',
        '操作步骤': '1. 选择一个AI角色\n2. 点击对话输入框旁的"语音输入"按钮\n3. 系统提示开始说话时，清晰说出"如何提高编程效率？"\n4. 点击停止录音\n5. 检查系统是否正确识别并显示文本\n6. 查看AI角色的回复',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '低'
    })
    
    test_cases.append({
        '测试用例ID': 'TC017',
        '测试功能': '高级功能 - 自定义角色模板',
        '测试描述': '验证用户能够基于现有模板创建自定义AI角色',
        '输入数据': '选择模板: 教育导师, 自定义参数: 专业领域=数学, 教学风格=互动式',
        '预期结果': '成功创建自定义AI角色，符合设定的参数特征',
        '操作步骤': '1. 登录系统\n2. 点击"创建自定义角色"按钮\n3. 从模板列表中选择"教育导师"模板\n4. 设置专业领域为"数学"\n5. 设置教学风格为"互动式"\n6. 设置其他个性化参数\n7. 点击"创建角色"按钮\n8. 与新创建的角色进行对话测试',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    # 8. 错误处理和安全测试
    test_cases.append({
        '测试用例ID': 'TC018',
        '测试功能': '错误处理 - 服务器无响应',
        '测试描述': '验证系统在服务器无响应时的错误处理机制',
        '输入数据': '触发服务器超时',
        '预期结果': '系统显示友好的错误提示，提供重试选项',
        '操作步骤': '1. 模拟网络中断或服务器无响应的情况\n2. 尝试发送消息给AI角色\n3. 观察系统的错误提示\n4. 等待错误超时后，检查是否有重试选项\n5. 恢复网络连接后，验证系统是否能够自动恢复',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    test_cases.append({
        '测试用例ID': 'TC019',
        '测试功能': '安全测试 - XSS攻击防护',
        '测试描述': '验证系统能够防御跨站脚本攻击',
        '输入数据': '<script>alert("XSS测试")</script>',
        '预期结果': '系统过滤或转义脚本标签，不执行恶意代码',
        '操作步骤': '1. 在对话输入框中输入`<script>alert("XSS测试")</script>`\n2. 发送该内容\n3. 检查系统是否过滤了脚本标签\n4. 确认没有弹出警告框\n5. 检查AI的回复是否正常',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '高'
    })
    
    test_cases.append({
        '测试用例ID': 'TC020',
        '测试功能': '安全测试 - 会话超时处理',
        '测试描述': '验证系统在用户会话超时时的安全处理',
        '输入数据': '用户长时间不活动',
        '预期结果': '系统自动登出用户，保护用户数据安全',
        '操作步骤': '1. 登录系统并进入应用\n2. 保持页面打开但不进行任何操作30分钟\n3. 30分钟后，尝试执行一个操作（如发送消息）\n4. 观察系统是否要求重新登录\n5. 重新登录后，验证之前的工作是否保存',
        '实际结果': '',
        '测试状态': '未执行',
        '优先级': '中'
    })
    
    # 创建DataFrame
    df = pd.DataFrame(test_cases)
    
    # 生成Excel文件
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    excel_file = f'AI角色模拟应用_详细操作步骤测试用例_{timestamp}.xlsx'
    
    # 写入Excel文件
    with pd.ExcelWriter(excel_file, engine='openpyxl') as writer:
        df.to_excel(writer, index=False, sheet_name='详细测试用例')
    
    print(f"详细测试用例已成功生成到文件: {excel_file}")
    print(f"共生成 {len(test_cases)} 条包含详细操作步骤的测试用例")
    
    return excel_file

if __name__ == "__main__":
    # 检查pandas和openpyxl是否安装
    try:
        import pandas as pd
        try:
            import openpyxl
        except ImportError:
            print("正在安装openpyxl库...")
            os.system('pip install openpyxl')
        
        generate_detailed_test_cases()
    except ImportError:
        print("正在安装pandas库...")
        os.system('pip install pandas openpyxl')
        # 重新导入并执行
        import pandas as pd
        generate_detailed_test_cases()